﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using NangLuongTieuDiemDTO.DTO;


namespace NangLuongTieuDiemDAO.DAO
{
    public class ChiTietThietBiHoaDonDAO
    {
        #region "[Insert]"
        /// <summary>
        /// Thêm 1 đối tượng ChiTietThietBiHoaDon
        /// </summary>
        /// <param name="cttbDto">đối tượng ChiTietThietBiHoaDon cần thêm</param>
        /// <returns>>0: thêm thành công, -1: Thêm thất bại</returns>
        public static int Insert(ChiTietThietBiHoaDonDTO cttbDto)
        {
            int IDResult = -1;
            try
            {
                // Mo ket noi
                SqlConnection cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = "insert into ChiTietThietBiHoaDon(HoaDonID, ThietBiDienID, SoLuong, ThoiGianSuDungTrongNgay, TongCongSuat, Xoa, GhiChu) values(@HoaDonID , @ThietBiDienID , @SoLuong, @ThoiGianSuDungTrongNgay, @TongCongSuat, @Xoa, @GhiChu)";

                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@HoaDonID", SqlDbType.Int);
                cmd.Parameters.Add("@ThietBiDienID", SqlDbType.Int);
                cmd.Parameters.Add("@SoLuong", SqlDbType.Int);
                cmd.Parameters.Add("@ThoiGianSuDungTrongNgay", SqlDbType.Decimal);
                cmd.Parameters.Add("@TongCongSuat", SqlDbType.Decimal);
                cmd.Parameters.Add("@Xoa", SqlDbType.Bit);
                cmd.Parameters.Add("@GhiChu", SqlDbType.NText);

                cmd.Parameters["@HoaDonID"].Value = cttbDto.HoaDonID;
                cmd.Parameters["@ThietBiDienID"].Value = cttbDto.ThietBiDienID;
                cmd.Parameters["@SoLuong"].Value = cttbDto.SoLuong;
                cmd.Parameters["@ThoiGianSuDungTrongNgay"].Value = Convert.ToDecimal(cttbDto.ThoiGianSuDungTrongNgay);
                cmd.Parameters["@TongCongSuat"].Value = Convert.ToDecimal(cttbDto.TongCongSuat);
                cmd.Parameters["@Xoa"].Value = cttbDto.Xoa;
                cmd.Parameters["@GhiChu"].Value = cttbDto.GhiChu;

                cmd.ExecuteNonQuery();

                // lay ID cua dong insert

                strSQL = "Select @@IDENTITY";
                cmd = new SqlCommand(strSQL, cn);
                IDResult = Convert.ToInt32(cmd.ExecuteScalar());

                // dong ket noi csdl
                cn.Close();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("Insert", ex);
            }

            return IDResult;
        }
        #endregion

        #region "[Update]"
        /// <summary>
        /// Cập nhật đối tượng ChiTietThietBiHoaDon
        /// </summary>
        /// <param name="cttbDto">đối tượng ChiTietThietBiHoaDon cần cập nhật</param>
        /// <returns>true: Cập nhật thành công, false: cập nhật thất bại</returns>
        public static bool Update(ChiTietThietBiHoaDonDTO cttbDto)
        {
            bool isSuccess = false;
            SqlConnection cn;
            try
            {
                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = "Update ChiTietThietBiHoaDon Set HoaDonID = @HoaDonID, ThietBiDienID = @ThietBiDienID, SoLuong = @SoLuong, ThoiGianSuDungTrongNgay = @ThoiGianSuDungTrongNgay, TongCongSuat = @TongCongSuat, Xoa = @Xoa, GhiChu = @GhiChu where ID = @ID and Xoa = 0";

                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);


                cmd.Parameters.Add("@HoaDonID", SqlDbType.Int);
                cmd.Parameters.Add("@ThietBiDienID", SqlDbType.Int);
                cmd.Parameters.Add("@SoLuong", SqlDbType.Int);
                cmd.Parameters.Add("@ThoiGianSuDungTrongNgay", SqlDbType.Decimal);
                cmd.Parameters.Add("@TongCongSuat", SqlDbType.Decimal);
                cmd.Parameters.Add("@Xoa", SqlDbType.Bit);
                cmd.Parameters.Add("@GhiChu", SqlDbType.NText);
                cmd.Parameters.Add("@ID", SqlDbType.Int);

                cmd.Parameters["@HoaDonID"].Value                = cttbDto.HoaDonID;
                cmd.Parameters["@ThietBiDienID"].Value           = cttbDto.ThietBiDienID;
                cmd.Parameters["@SoLuong"].Value                 = cttbDto.SoLuong;
                cmd.Parameters["@ThoiGianSuDungTrongNgay"].Value = Convert.ToDecimal(cttbDto.ThoiGianSuDungTrongNgay);
                cmd.Parameters["@TongCongSuat"].Value            = Convert.ToDecimal(cttbDto.TongCongSuat);
                cmd.Parameters["@Xoa"].Value                     = cttbDto.Xoa;
                cmd.Parameters["@GhiChu"].Value                  = cttbDto.GhiChu;
                cmd.Parameters["@ID"].Value                      = cttbDto.ID;

                cmd.ExecuteNonQuery();

                // dong ket noi csdl
                cn.Close();
                isSuccess = true;

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("Update", ex);
            }
            return isSuccess;
        }
        #endregion

        #region "[Delete]"
        /// <summary>
        /// Xóa 1 đối tượng ChiTietThietBiHoaDon
        /// </summary>
        /// <param name="ID">mã đối tượng ChiTietThietBiHoaDon cần xóa</param>
        /// <returns></returns>
        public static bool Delete(int ID)
        {
            bool isSuccess = false;
            SqlConnection cn;
            try
            {
                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = " Update ChiTietThietBiHoaDon Set Xoa = 1 where ID = @ID";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@ID", SqlDbType.Int);
                cmd.Parameters["@ID"].Value = ID;


                cmd.ExecuteNonQuery();
                // dong ket noi csdl
                cn.Close();
                isSuccess = true;

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("Delete", ex);
            }
            return isSuccess;
        }
        #endregion

        #region "[Get all]"
        /// <summary>
        /// Lấy danh sách các đối tượng ChiTietThietBiHoaDon
        /// </summary>
        /// <returns>danh sách các đối tượng ChiTietThietBiHoaDon</returns>
        public static List<ChiTietThietBiHoaDonDTO> GetAll()
        {
            List<ChiTietThietBiHoaDonDTO> ds_cttbDto = new List<ChiTietThietBiHoaDonDTO>();
            try
            {
                SqlConnection cn;

                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = " Select * From ChiTietThietBiHoaDon where Xoa = 0";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                SqlDataReader dr = cmd.ExecuteReader();



                while (dr.Read() == true)
                {
                    ChiTietThietBiHoaDonDTO cttbDto = new ChiTietThietBiHoaDonDTO();
                    cttbDto.ID = dr.GetInt32(0);
                    cttbDto.HoaDonID = dr.GetInt32(1);
                    cttbDto.ThietBiDienID = dr.GetInt32(2);
                    cttbDto.SoLuong = dr.GetInt32(3);
                    cttbDto.ThoiGianSuDungTrongNgay = Convert.ToDouble(dr.GetDecimal(4));
                    cttbDto.TongCongSuat = Convert.ToDouble(dr.GetDecimal(5));
                    cttbDto.Xoa = dr.GetBoolean(6);
                    cttbDto.GhiChu = dr.GetString(7);

                    ds_cttbDto.Add(cttbDto);
                }

                cn.Close();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("GetAll", ex);
            }
            return ds_cttbDto;
        }
        #endregion

        #region "[SelectByPrimaryKey]"
        /// <summary>
        /// Lấy 1 đối tượng ChiTietThietBiHoaDon theo khóa chính
        /// </summary>
        /// <param name="ID">mã đối tượng ChiTietThietBiHoaDon</param>
        /// <returns></returns>
        public static ChiTietThietBiHoaDonDTO SelectByPrimaryKey(int ID)
        {
            ChiTietThietBiHoaDonDTO cttbDto = null;
            try
            {
                SqlConnection cn;

                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = " Select * From ChiTietThietBiHoaDon where ID = @ID and Xoa = 0";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@ID", SqlDbType.Int);
                cmd.Parameters["@ID"].Value = ID;

                SqlDataReader dr = cmd.ExecuteReader();

                cttbDto = new ChiTietThietBiHoaDonDTO();


                while (dr.Read() == true)
                {
                    cttbDto.ID = dr.GetInt32(0);
                    cttbDto.HoaDonID = dr.GetInt32(1);
                    cttbDto.ThietBiDienID = dr.GetInt32(2);
                    cttbDto.SoLuong = dr.GetInt32(3);
                    cttbDto.ThoiGianSuDungTrongNgay = Convert.ToDouble(dr.GetDecimal(4));
                    cttbDto.TongCongSuat = Convert.ToDouble(dr.GetDecimal(5));
                    cttbDto.Xoa = dr.GetBoolean(6);
                    cttbDto.GhiChu = dr.GetString(7);

                }

                // Dong ket noi csdl
                cn.Close();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("SelectByPrimaryKey", ex);
            }
            return cttbDto;
        }
        #endregion

        #region "[Hàm insert lỗi hệ thống]"
        public static void InSert_LoiHeThong(string TenHam, Exception ex)
        {
            LoiHeThongDTO lhtDto = new LoiHeThongDTO();
            lhtDto.TenLoi = ex.Message.ToString();
            lhtDto.NgayTao = DateTime.Now;
            lhtDto.TenHamBiLoi = "ChiTietThietBiHoaDonDAO_" + TenHam;
            lhtDto.SuaLoi = false;
            lhtDto.GhiChu = "";
            LoiHeThongDAO.Insert(lhtDto);

        }
        #endregion
    }
}
